home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
kowin
/
archive
/
sys
/
kowin14b.lzh
/
doc
/
hfont.doc
< prev
next >
Wrap
Text File
|
1994-09-09
|
16KB
|
416 lines
X680x0 High-Speed Font Driver
hfont.r Version 1.22
1994 6/28 小笠原博之
従来 h12fon.r という名前で公開していた高速 FONT ドライバの新版です。文字表
示の源である IOCS FNTADR,FNTGET を高速化&拡張します。
(1) 高速なアドレス計算ルーチンによる IOCS FNTADR,FNTGET 全体の高速化
(2) 12/16/24dot(全角,半角,1/4角)に及ぶすべての ROM FONT 切り替えが可能
(3) 12dot FONT を外部から組み込むことによって読みやすい 12dot 全角表示が可能
(4) (3)を組み込まなくても独自の FONT 生成ルーチンで見やすい 12dot 漢字表示
(5) 新たに IOCS レベルで 10dot FONT の利用が可能になる (漢字表示可能)
(6) 外部操作用コマンドhfc付属(あとからfont切替,状態表示,カタひら変換他可能)
(7) 開発用C言語LIB付属
Ko-Window 使用時には、10dot FONT 対応と高速化のため、必ずこの hfont.r を組
み込んでおくようにして下さい。
v1.20 -> 1.22 の変更点: 12dotフォント時1/4角文字が潰れるバグ修正, 10dot全角
の外部組み込み対応, hfontlib.a hfc.x の同梱, hfont6x6.fon 付属
●付属ファイルについて
hfont.r ドライバ本体
hfont.doc このドキュメント
hfc.x hfontドライバコントロールコマンド
hfc.doc hfc.x のマニュアル
hfont10.fon 10x5 dot半角ASCIIフォント
hfont6x6.fon 6x6 dot全角ASCIIフォント(12dot 1/4角フォント)
hfontlib.h 開発用ライブラリヘッダ
hfontlib.a 開発用ライブラリ
hfontlib.man ライブラリマニュアル
allfont.c 速度測定サンプル
注: Ko-Window 基本セットには hfont.r hfont10.fon hfont.doc のみ同梱しています
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
●使い方
hfont [スイッチ] [フォントファイル..]
そのまま実行すると常駐します。この時組み込むフォントファイルを与えることが
可能です。ファイルは複数指定できます。フォントファイルの拡張子は見ていません
ので、必ず拡張子まで書いて下さい。
-r スイッチをつけて実行すると常駐解除になります。
10dot フォントの利用を可能にするには、付属の hfont10.fon の組み込みが必要
です。
<例>
hfont maru.fon Hart.f12 2つのFONT FILEを組み込んで常駐
hfont hfont10.fon 付属の10dot半角FONT を組み込んで常駐
hfont -r 常駐解除
CONFIG.SYS で組み込む場合は、PROGRAM 行に記述して下さい。
<例>
PROGRAM = a:\sys\hfont.r a:\sys\hfont10.fon
注意: フォントファイル組み込みに失敗するようでしたら、大きなファイルから順に
与えてみて下さい。
●スイッチ
-u 外字領域は組み込みフォントではなくSYSTEM外字を優先にします
-r 常駐を解除します
●フォント組み込み
フォントファイルは、IOCS.X(HIOCS.X) や TC.X 等で用いる FON 形式のファイル
と互換性があります。さらに全角フォントだけの組み込みや、10/12/24 dot のフォ
ントも扱えるように拡張されています。
組み込みできるフォントファイルには以下の種類があります。それぞれフォントサ
イズや種類は、ドライバがファイルサイズから勝手に判断するので、いちいちコマン
ドラインから指示する必要はありません。
★ :HIOCS.X や TC.X でも共通使えるフォントファイル
ROM :ROMに元々内蔵されているフォント
IOCS :IOCS がコンバートして自動作成するもの
HFONT:hfont.r コンバートして自動作成するもの
type
ASC 10dot 半角のみ ( 5x10) $00~$ff 2560 byte ◎
ASC 12dot 半角のみ ( 6x12) $00~$ff 3072 byte ROM
ASC 16dot 半角のみ ( 8x16) $00~$ff 4096 byte ★ ROM
ASC 24dot 半角のみ (12x24) $00~$ff 12288 byte ROM
ASC 12dot 1/4角のみ ( 6x6 dot) $00~$ff 1536 byte ◇ ROM
ASC 16dot 1/4角のみ ( 8x8 dot) $00~$ff 2048 byte ROM
ASC 24dot 1/4角のみ (12x12dot) $00~$ff 6144 byte ROM
ZFN0 10dot 全角のみ 非漢字 2121~2f7e 28200 byte HFONT
ZFN0 12dot 全角のみ 非漢字 2121~2f7e 33840 byte IOCS
ZFN0 16dot 全角のみ 非漢字 2121~2f7e 45120 byte ROM
ZFN0 24dot 全角のみ 非漢字 2121~2f7e 67680 byte ROM
ZFN1 10dot 全角のみ 非漢字+第1水準 2121~4f7e 88360 byte HFONT
ZFN1 12dot 全角のみ 非漢字+第1水準 2121~4f7e 106032 byte IOCS
ZFN1 16dot 全角のみ 非漢字+第1水準 2121~4f7e 141376 byte ROM
ZFN1 24dot 全角のみ 非漢字+第1水準 2121~4f7e 318096 byte ROM
ZFN2 10dot 全角のみ 全部(非+第1+第2) 2121~7e7e 176720 byte HFONT
ZFN2 12dot 全角のみ 全部(非+第1+第2) 2121~7e7e 212064 byte IOCS
ZFN2 16dot 全角のみ 全部(非+第1+第2) 2121~7e7e 282752 byte ROM
ZFN2 24dot 全角のみ 全部(非+第1+第2) 2121~7e7e 636192 byte ROM
FON0 10dot 半角+全角 非漢字 30760 byte HFONT
FON0 12dot 半角+全角 非漢字 36912 byte ROM/IOCS
FON0 16dot 半角+全角 非漢字 49216 byte ★ ROM
FON0 24dot 半角+全角 非漢字 79968 byte ROM
FON1 10dot 半角+全角 非漢字+第1水準 90920 byte HFONT
FON1 12dot 半角+全角 非漢字+第1水準 109104 byte ROM/IOCS
FON1 16dot 半角+全角 非漢字+第1水準 145472 byte ★ ROM
FON1 24dot 半角+全角 非漢字+第1水準 324240 byte ROM
FON2 10dot 半角+全角 全部(非+第1+第2) 179280 byte HFONT
FON2 12dot 半角+全角 全部(非+第1+第2) 215136 byte ROM/IOCS
FON2 16dot 半角+全角 全部(非+第1+第2) 286848 byte ★ ROM
FON2 24dot 半角+全角 全部(非+第1+第2) 648480 byte ROM
付属の hfont10.fon は◎マークのファイルです
hfont6x6.fon は◇マークのファイルです
● 10dot フォントの拡張
IOCS の _FNTADR($16), _FNTGET($19) では、16/24dot の ROM 内フォントの呼び
出しの他に、12dot フォントも使用できるようになっています。さらにこの hfont.r
を組み込むと、10dot フォントがも全く同様に使用できるようになります。(ただし、
半角フォントとして付属の hfont10.fon を組み込んでおく必要がある)
以下に、それらの使い方を説明します。
IOCS CALL $16 _FNTADR
入力 d1.w = 呼び出す文字コード
d2.l = フォントサイズ 5=10dot, 6=12dot, 8=16dot, 12=24dot
出力 d0.l = フォントアドレス
d1.w = 横方向バイト数-1
d2.w = 縦方向ドット数-1
(注:プログラマーズマニュアル等には載っていませんが、出力の
d1.l の上位ワードには横方向のドット数が入ります)
IOCS CALL $19 _FNTGET
入力 d1.l = 下位16bit: 呼び出す文字コード
上位16bit: フォントサイズ 5=10dot,6=12dot,8=16dot,12=24dot
a1.l = 読み出しバッファアドレス
出力 0(a1).w = 横方向ドット数
2(a1).w = 縦方向ドット数
4(a1).? = 読み出したフォントパターン 展開バイト数は次の通り
24x24 : 72byte
24x12 : 48byte
16x16 : 32byte
16x8 : 16byte
12x12 : 24byte
12x6 : 12byte
10x10 : 20byte
10x5 : 12byte <= パターンは10byteだが12byte破壊され
ることに注意!
● 12dot フォント生成について
12dot 全角フォントは X680x0 の ROM には含まれていないので、元々の IOCS では
24dot フォントを圧縮して作り上げるようになっていました。これは線が太く読み
にくく、また作成に時間がかかるので表示もかなり遅くなっています。
そこでこの hfont.r では 16dot 全角フォントからの変換を行い、みやすくかつ高
速処理を実現しています。
もちろん、外部から 12dot 全角文字を組み込めば変換が必要ないため、さらに高速
で読みやすくなります。フリーで配布されている 12dot フォントを持っている方は組
み込んでみるといいでしょう。
12dot 1/4角フォント(6x6dot)は、hfont v1.20 ではバグがあって正常に表示されま
せんでした。v1.21 以降は直っています。この 12dot 1/4角フォントも IOCS 内部で
変換して作られるためあまり表示は見やすくはありません。これも外部から組み込む
ことで読みやすくなります。付属の hfont6x6.fon はこの 12dot 1/4角フォントのサ
ンプルです。組み込まなくても表示できますが、気になる方は使用してみて下さい。
(ただしフォントが全部そろっているわけではありません)
< hfont6x6.fon を仕上げてくれたでんでんネットの美紀chanさんに感謝 >
● 10dot フォント生成について
10dot 半角フォントは ROM にありません。そこで 10dot フォントを使用する場合
は外部から半角フォントを組み込んでおかなければなりません。このアーカイブには
hfont10.fon という 10dot 半角サンプルフォントを付属しているのでそれを組み込
みます。(デザインが気に入らない方は適当に修正して下さい)
10dot 全角フォントも当然 ROM にありませんのでなんらかの形で作成する必要があ
ります。hfont では、12dot全角同様内部でフォント加工をしてこれをリアルタイムに
作成します。v1.22 からは外部組み込みも可能になりました。外部組み込みの場合は
加工が不用なため、IOCS _FNTGET で約3倍程速くなります。
ただし 1/4角文字には完全対応していません。取り敢えず表示はできますが、レジ
スタの戻り値のドットサイズを利用しているプログラムでは 12dot 1/4角として扱わ
れる可能性があります。
●フォントファイルの構造についてちょっとだけ説明
<<半角部 (ASCIIコード)>>
フォントファイルでは、特別なヘッダ等はなく直接文字コード $00 から順に $ff
までの 256 文字分のデータが素直に並んでいます。実際の文字並びを以下に示しま
す。(都合上全角文字で表現しています)
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
-------------------------------------------------------
00 SH SX EX ET EQ AK BL BS HT LF VT FF CR SO SI
10 DE D1 D2 D3 D4 NK SN EB CN EM SB EC → ← ↑ ↓
20 ! ” # $ % & ’ ( ) * + , - . /
30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40 @ A B C D E F G H I J K L M N O
50 P Q R S T U V W X Y Z [ ¥ ] ^ _
60 ‘ a b c d e f g h i j k l m n o
70 p q r s t u v w x y z { | }  ̄
80 \ ~ | を ぁ ぃ ぅ ぇ ぉ ゃ ゅ ょ っ
90 あ い う え を か き く け こ さ し す せ そ
A0 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
B0 ー ア イ ウ エ ヲ カ キ ク ケ コ サ シ ス セ ソ
C0 タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
D0 ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜
E0 た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま
F0 み む め も や ゆ よ ら り る れ ろ わ ん
上記の表のなかで $20, $a0 の文字は空白です。$83~$85 および $fe~$ff は未
定義です。SRAM スイッチのキャラクタ切り替え設定を有効にするためには、必ず以
下のように定義しておいて下さい。
$5c 円マーク
$7c つながった縦線
$7e オーバーライン
$80 バックスラッシュ
$81 チルダ(波線)
$82 真ん中の切れた縦線
$00~$1f および $7f はコントロールキャラクタです。普通の文字出力では出てき
ませんが、$8000~$801f, $807f のコードで呼び出すと、指定したフォントの内容を
呼び出すことができます。
1文字分のデータは上位側にデータを詰めておきます例えば、12x6dot フォントで
は横1列のうち上位 6bit が有効で、下位2bit は 0 にしておきます。10x5dot フォ
ントも同様に上位 5bitのみ使用し、24x12dot フォントでは、横1列 2byte のうち
上位 12bit のみ使います。
<<全角部>>
コード順に 2121(JIS) 8140(SJIS) から 7e7e(JIS) effc(SJIS) まで順番に並んで
います。以下にそのコード範囲とそれぞれのフォントファイルに含まれるコード範囲
を表にします。
JIScode SJIScode ASC ZFN0 ZFN1 ZFN2 FON0 FON1 FON2 -u
----------------------------------------------------------------------------
ASCII256文字 ○ × × × ○ ○ ○
2121~287e 8540~84fc 非漢字 × ○ ○ ○ ○ ○ ○
2921~2a7e 8540~85fc 未使用 × ○ ○ ○ ○ ○ ○
2b21~2c7e 8640~86fc 外字その1 × ○ ○ ○ ○ ○ ○ --
2d21~2f7e 8740~889e 未使用 × ○ ○ ○ ○ ○ ○
3021~4f7e 889f~989e 第1水準漢字 × × ○ ○ × ○ ○
5021~7b7e 989f~ee9e 第2水準漢字 × × × ○ × × ○
7621~777e eb9f~ec9e 外字その2 × × × ○ × × ○ --
7821~7e7e ec9f~effc 拡張外字領域 × × × ○ × × ○ --
フォントを組み込む場合の非漢字フォントファイルとは、2121~2f2e までの文字
ファイルをいいます。つまり未使用領域と外字領域その1を含みます。
拡張外字領域とは、フォント分の領域が SYSTEM に用意されていないものの、むり
やり定義可能でIOCSのバグ(?)で使用できてしまう外字領域です。これは外字領域そ
の2とともに第2水準までのフォントファイルに含まれます。
CONFIG.SYS の USKCG 行で指定できる SYSTEM の外字領域は上記の通り2箇所にあ
りますが、もちろんこのドライバでその部分を置き換えた場合はわざわざその外字を
登録する必要はありません。(登録しても無駄にはなりませんが意味はありません)
ですが、特別にシステム側で組み込んだ外字を優先にしたいという場合には、起動
時に -u スイッチをつけて常駐させて下さい。この場合フォントファイルのうち上記
の2箇所の外字部分(+拡張外字領域)は使われず、必ず SYSTEM の外字を使用します。
●外部コントロール機能について
このドライバは、自分自身が持っているフォント切替機能の他に、さまざま柔軟な
フォント切り替えができるようになっています。
例えば全角漢字フォントは必ず連続メモリ領域にパターンが並んでいる必要はなく、
JIS コードでいう94文字単位の1ブロック毎に、任意のアドレスに点在させること
ができるようになっています。これによって任意のブロックのみ外部から置き換え、
他のブロックは ROM フォントを使用するといった使い方も可能です。
これらのコントロールは、外部から常駐部内テーブルへのアクセスによって行いま
す。外部アクセスのためのインターフェースは h12fon.r 互換です。C言語からアク
セスするための hfontlib.a を別配布しています。
●ドライバの速度レポート
ちょっとした速度テストを行ってみました。IOCS FNTGET にて全部のフォントパター
ンを読み出すループ比較です。
・ROM IOCS v1.0 87/05/07版 (X68000PRO,CZ-652C のもの)
size 半角ASCII 全角JIS 全角SJIS 合計 速度比
12dot 9:96 109:59 105:39 224:94 1.00
16dot 10:54 17:93 19:65 48:12 1.00
24dot 17:41 27:53 28:66 73:60 1.00
・IOCS.X v1.50
常駐方法: iocs.x (スイッチ指定なし)
size 半角ASCII 全角JIS 全角SJIS 合計 速度比
12dot 7:56 93:76 88:77 190:09 1.18
16dot 7:57 10:91 11:25 29:73 1.62
24dot 10:02 14:26 14:37 38:65 1.90
・hfont.r v1.20 内部で12dot全角フォントを作り出す場合
常駐方法: hfont hfont10.fon
size 半角ASCII 全角JIS 全角SJIS 合計 速度比
10dot 6:15 29:45 28:12 63:72 ----
12dot 6:18 25:28 24:23 55:69 4.04
16dot 6:05 8:87 8:86 23:78 2.02
24dot 7:69 11:19 11:00 29:88 2.46
・hfont.r v1.20 外部12dot全角フォントを組み込んだ時
常駐方法: hfont zen12.fon hfont10.fon
size 半角ASCII 全角JIS 全角SJIS 合計 速度比
10dot 6:15 29:46 28:11 63:72 ----
12dot 6:21 8:86 8:87 23:94 9.40
16dot 6:10 8:94 8:87 23:91 2.01
24dot 7:69 11:21 11:00 29:90 2.46
ここでの速度比とは厳密ではなくチェックプログラムにおける動作上のものです。
(チェックプログラムソースは付属の allfont.c )
●関連ツール
hfontlib.a 外部から hfont.r のフォント切り替えサービス等を操作
するためのC言語用ライブラリです。v1.22 から同梱にな
りました。ソースリストが必要な方は別と入手して下さい。
hfc.x 外部から hfont.r の状態をコントロールし、フォント切
り替え等を行わせるツールです。hfontlib のサンプルと
してもどうぞ。v1.22 から同梱になりました。ソースリス
トは hfontlib のソースアーカイブに含まれています。
以下は別配布している関連ツールです。できれば一緒に転載して下さい。
make12.x フォントマネージャです。合成、取り出し、変換等、FON
形式のファイルにおけるあらゆる操作を可能にします。
12,16,24dot 対応です。
16to10.x 16dot 用フォントツールで 10dot や 8dot 等を作成する
ための簡易コンバータです。相互変換や他のドット数にも
(リネームするだけで)対応できます。(ただし半角のみ)
フォントエディタは FONTED2.X および Ko-Window 上に FONTED3.win, FED3_24.win
USK_WIN.win , TC_WIN.win , CODE.win 等、各種環境をそろえてあります。
●配布
このプログラムの著作権は作者が有します。すべてのプログラムコードおよびこの
ドキュメント内容の無断改変や部分的な無断転用を禁じます。動作は無保証であり、
このプログラムの使用によって生じたいかなる被害においても作者は無関係で責任は
ないものとします。販売等の利益目的で使用されない場合においては自由に配布や利
用が可能で、ネット等へ転載やアップロードができます。その場合特に作者へ許可を
求める必要はありません。
●謝辞
このプログラムの作成には、さまざまなフリーソフトウエアを活用させていただき
ました。このプログラムは Ko-Window 環境上で HAS.X, HLK.X によって開発され、
配布には LHA.X 等のツールを活用させていただきました。作者の方々にはたいへん
感謝します。
●連絡先
小笠原博之 oga@dgw.yz.yamagata-u.ac.jp
DenDen-NET: DEN0006 COR.